package com.igeek.d0604;

import com.igeek.d0604.exception.DeleteException;
import com.igeek.d0604.exception.InsertException;
import com.igeek.d0604.exception.UpdateException;

import java.util.*;

/**
 * @Author: zhiyu
 * @Date:17:39
 * @DESC:
 */
public class BookManager {
    public static void main(String[] args) {
        Map<String, ArrayList<Book>> map = new HashMap<>();
        // 创建集合对象，用于存储学生数据
        ArrayList<Book> it = new ArrayList<Book>();
        it.add(new Book("Java入门到精通", 99));
        it.add(new Book("PHP入门到精通", 9.9));
        map.put("其他书籍", it);
        ArrayList<Book> mz = new ArrayList<Book>();
        mz.add(new Book("西游记", 19));
        mz.add(new Book("水浒传", 29));
        mz.add(new Book("三国演义", 32.9));
        mz.add(new Book("红楼梦", 28));
        map.put("名著", mz);

        while (true) {
            //这是学生管理系统的主界面
            System.out.println("--------欢迎来到学生管理系统--------");
            System.out.println("1.查看所有书籍");
            System.out.println("2.添加书");
            System.out.println("3.删除书");
            System.out.println("4.修改书");
            System.out.println("5.退出");
            System.out.println("请输入你的选择：");

            //创建键盘录入对象
            Scanner sc = new Scanner(System.in);
            int num = sc.nextInt();
            switch (num) {
                case 1:
                    // 查看所有书籍
                    findAllBook(map);
                    break;
                case 2:
                    // 添加书籍
                    addBook(map);
                    break;
                case 3:
                    // 删除书
                    deleteBook(map);
                    break;
                case 4:
                    // 修改书
                    editBook(map);
                    break;
                case 5:
                    // 退出
                    System.out.println("谢谢你的使用");
                    System.exit(0); // JVM退出
                    break;
                default:
                    System.out.println("输入错误,请重新输入");
                    break;
            }
        }
    }
    private static void addBook(Map<String, ArrayList<Book>> map){
        try {
            // 创建键盘录入对象
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入要添加书籍的类型:");
            String type = sc.next();
            System.out.println("请输入要添加的书名:");
            String name = sc.next();
            System.out.println("请输入要添加书的价格:");
            double price = sc.nextDouble();
            Book book = new Book(name, price);

            // 拿到书籍列表
            ArrayList<Book> books = map.get(type);
            if (books == null) {
                // 如果书籍列表不存在创建一个书籍列表
                books = new ArrayList<>();
                map.put(type, books);
            }

            // 将书添加到集合中
            books.add(book);
            System.out.println("添加" + name + "成功");
        }catch (RuntimeException e){
            throw new InsertException("你的添加操作失败啦");
        }
    }
    private static void deleteBook(Map<String, ArrayList<Book>> map){
        try {

            // 创建键盘录入对象
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入要删除书籍的类型:");
            String type = sc.next();
            System.out.println("请输入要删除的书名:");
            String name = sc.next();

            // 拿到书籍列表  ： 用Map集合的
            ArrayList<Book> books = map.get(type);
            if (books == null) {
                System.out.println("您删除的书籍类型不存在");
                return;
            }

            for (int i = 0; i < books.size(); i++) {
                Book book = books.get(i);
                if (book.getName().equals(name)) {
                    books.remove(i); // 找到这本书,删除这本书
                    System.out.println("删除" + name + "书籍成功");
                    return; // 删除书籍后结束方法
                }
            }
            System.out.println("没有找到" + name + "书籍");
        }catch (RuntimeException e){
            throw new DeleteException("你的删除操作失败啦");
        }
    }
    private static void editBook(Map<String, ArrayList<Book>> map) {
        try {

            // 创建键盘录入对象
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入要修改书籍的类型:");
            String type = sc.next();
            System.out.println("请输入要修改的书名:");
            String oldName = sc.next();

            System.out.println("请输入新的书名:");
            String newName = sc.next();
            System.out.println("请输入新的价格:");
            double price = sc.nextDouble();

            // 拿到书籍列表
            ArrayList<Book> books = map.get(type); // 根本不不像一个技术人员
            if (books == null) {
                System.out.println("您修改的书籍类型不存在");
                return;
            }

            for (int i = 0; i < books.size(); i++) {
                Book book = books.get(i);
                if (book.getName().equals(oldName)) {
                    // 找到这本书,修改这本书
                    book.setName(newName);
                    book.setPrice(price);
                    System.out.println("修改成功");
                    return; // 修改书籍后结束方法
                }
            }
            System.out.println("没有找到" + oldName + "书籍");
        }catch (RuntimeException e){
            throw  new UpdateException("你的修改操作失败啦");
        }
    }
    private static void findAllBook(Map<String, ArrayList<Book>> map) {
        System.out.println("类型\t\t书名\t价格");
        Set<Map.Entry<String, ArrayList<Book>>> entries = map.entrySet();
        for (Map.Entry<String, ArrayList<Book>> entry : entries) {
            String key = entry.getKey();
            System.out.println(key);

            ArrayList<Book> value = entry.getValue();
            for (Book book : value) {
                System.out.println("\t\t" + book.getName() + "\t" + book.getPrice());
            }
        }
    }
}